const { src, dest } = require('gulp');
const { globs, since } = require('../common');

/**
 * 依赖分析和提取, 处理项目的npm 与 小程序npm 的依赖关系
 */
 const mpNpm = require('gulp-mp-npm'); 

 /**
  * gulp-babel 使用, es6 转es5 防止浏览器不兼容es5以上
  * 1. 需要安装gulp-babel(npm install --save-dev gulp-babel)
  * 2. babel 依赖于 @babel/core, 不然会保存, 需要安装@babel/core（npm install --save-dev @babel/core）
  * 3. 此时打包会出现转换失效的效果, 需要加{ presets: ['@babel/preset-env']}, 而@babel/preset-env 需要安装（npm install --save-dev @babel/preset-env）
  */
 const babel = require('gulp-babel'); 

/**
 * 压缩js 文件
 * drop_debugger： 不删除debugger, 建议生产模式删除debugger
 */
const uglify = require('gulp-uglify');


 /**
  * 文件映射，解决处理后代码无法debug 的问题
  * 安装：npm install --save-dev gulp-sourcemaps
  */
const sourcemaps = require('gulp-sourcemaps');


/**
 * 查看编译文件
 * 安装：npm install --save-dev gulp-deubg
 * 使用：.pipe(gulpDeubg({title: 'unicorn:'}))
 */
const gulpDeubg = require('gulp-debug')


 /**
 * 编译js文件
 */
const js = () => {
    return src(globs.js, { since: since(js) })
    .pipe(gulpDeubg({title: 'unicorn:'}))
    .pipe(sourcemaps.init())
    .pipe(babel({ presets: ['@babel/preset-env']}))
    .pipe(sourcemaps.write())
    .pipe(mpNpm())
    .pipe(dest('dist/'))
  };

   /**
 * 编译js文件
 */
const jsPro = () => {
  return src(globs.js, { since: since(js) })
  .pipe(gulpDeubg({title: 'unicorn:'}))
  .pipe(sourcemaps.init())
  .pipe(babel({ presets: ['@babel/preset-env']}))
  .pipe(uglify({ compress: { drop_debugger: false } }))
  .pipe(sourcemaps.write())
  .pipe(mpNpm())
  .pipe(dest('dist/'))
};
  
module.exports = jsPro;